package cn.xzhang.boot.service;

import cn.xzhang.boot.common.pojo.PageResult;
import cn.xzhang.boot.model.dto.carousel.CarouselAddReqDTO;
import cn.xzhang.boot.model.dto.carousel.CarouselPageReqDTO;
import cn.xzhang.boot.model.dto.carousel.CarouselUpdateReqDTO;
import cn.xzhang.boot.model.entity.Carousel;
import cn.xzhang.boot.model.vo.carousel.CarouselSimpleVo;
import cn.xzhang.boot.model.vo.carousel.CarouselVo;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * @author <a href="https://github.com/XiaoZhangCode">XiaoZhangCode</a>
 * @description 针对表【carousel(轮播图表)】的数据库操作Service
 */
public interface CarouselService extends IService<Carousel> {

    /**
     * 添加轮播图信息。
     *
     * @param carouselReqDTO 轮播图添加请求数据传输对象，包含要添加的轮播图的所有必要信息。
     * @return 返回添加操作的自增ID，用于标识此次添加操作。
     */
    long addCarousel(CarouselAddReqDTO carouselReqDTO);

    /**
     * 更新轮播图信息。
     *
     * @param carouselReqDTO 包含轮播图更新信息的请求DTO（数据传输对象）。该对象应包含需要更新的轮播图属性。
     * @return boolean 返回true如果轮播图信息更新成功，返回false如果更新失败或遇到错误。
     */
    boolean updateCarousel(CarouselUpdateReqDTO carouselReqDTO);

    /**
     * 删除轮播图
     *
     * @param id 轮播图的唯一标识符
     * @return boolean 返回操作是否成功。true表示删除成功，false表示删除失败。
     */
    boolean deleteCarousel(Long id);

    /**
     * 根据Carousel对象获取对应的CarouselVo对象。
     *
     * @param carousel 一个包含轮播图信息的Carousel对象。
     * @return 返回一个包含轮播图信息的CarouselVo对象。
     */
    CarouselSimpleVo getSimpleCarouselVO(Carousel carousel);

    /**
     * 获取轮播图页面信息
     *
     * @param carouselPageReqDTO 包含分页和筛选条件的轮播图请求数据传输对象
     * @return 返回轮播图页面的结果，包括轮播图列表和分页信息
     */
    PageResult<CarouselVo> getCarouselPage(CarouselPageReqDTO carouselPageReqDTO);

    /**
     * 根据Carousel对象获取对应的CarouselVo对象。
     *
     * @param carousel 一个包含轮播图信息的Carousel对象。
     * @return 返回一个包含轮播图信息的CarouselVo对象。
     */
    CarouselVo getCarouselVO(Carousel carousel);
}
